package com.yuw.hw20190417.test01;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.junit.jupiter.api.Test;

public class TestDriver {

	/**
	 * 使用集合来存储该二维表格的内容，并进行遍历显示，要求和表格内容显示一样
	 */
	@Test
	public void test01() {
		// 初始化数据
		List<Map<String, Object>> lst = init();
		// 遍历打印数据
		if (lst != null && lst.size() > 0) {
			// 需要使用两层循环进行打印
			Set<String> setKeys = lst.get(0).keySet();
			// 打印表头
			for (String eachKey : setKeys) {
				System.out.print("    " + eachKey);
			}
			// 换行
			System.out.println();

			// 从lst中取出map对象
			// 迭代遍历map
			for (Map<String, Object> map : lst) {

				// 迭代器遍历
				Iterator<String> keys = setKeys.iterator();
				while (keys.hasNext()) {
					System.out.print("    " + map.get(keys.next()));
				}
				// 换行
				System.out.println();
			}
		}

	}

	@Test
	public void test02() {
		// 初始化数据
		List<Map<String, Object>> lst = init();
		// 遍历打印数据

		int only = 1;

		// 需要使用两层循环进行打印
		// 从lst中取出map对象
		// 迭代遍历map
		for (Map<String, Object> map : lst) {
			// 获取表头的key的集合
			Set<String> setKeys = lst.get(0).keySet();
			// 打印表头
			if (only-- > 0) {
				for (String eachKey : setKeys) {
					System.out.print("    " + eachKey);
				}
				// 换行
				System.out.println();
			}

			// 迭代器遍历
			Iterator<String> keys = setKeys.iterator();
			while (keys.hasNext()) {
				System.out.print("    " + map.get(keys.next()));
			}
			// 换行
			System.out.println();
		}

	}

	/**
	 * 初始化数据，使用List+Map的形式保存一个二维表格的数据
	 * 
	 * @return 二维表的list
	 */
	private List<Map<String, Object>> init() {
		// 初始化数据
		List<Map<String, Object>> lst = new ArrayList<>();
		// 行数
		int count = 3;
		for (int i = 0; i < count; i++) {
			// 创建一个Map用于保存一行数据中的键值对
			// 注意为了保证 有序，需要使用LinkedHashMap
			Map<String, Object> map = new LinkedHashMap<>();
			map.put("num", i + 1);
			map.put("name", "张" + (i + 1));
			map.put("sex", "女");
			map.put("age", Math.random() * 10 + 20);
			map.put("score", Math.random() * 30 + 70);

			// 将map存入list中，list中一个map表示一行数据
			lst.add(map);
		}

		return lst;
	}
}
